/**
 * Author@ Cheng Feitian
 * Date: 2021-4-4
 * Description: 继承中的同名静态成员处理
 */

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;
const int maxn = 1024;

class Base
{
public:
    static int m_A;

    static void func(){
        cout << "Base - func()函数调用！" << endl;
    }

    static void func(int a){
        cout << "Base - func(int a)函数调用！" << endl;
    }
};
int Base::m_A = 100;

class Son : public Base
{
public:
    static int m_A;

    static void func(){
        cout << "Son - func()函数调用！" << endl;
    }
};
int Son::m_A = 200;

//同名静态成员属性
void test01(){
    //1.通过对象访问
    cout << "通过对象访问" << endl;
    Son son;
    cout << "Son下的 m_A = " << son.m_A << endl;
    cout << "Base下的m_A = " << son.Base::m_A << endl;
    //2.通过类名访问
    cout << "通过类名访问" << endl;
    cout << "Son下的 m_A = " << Son::m_A << endl;
    //两个冒号意义不同  1.表示通过类名访问 2.表示访问 Base作用域下的 m_A   
    cout << "Base下的 m_A = " << Son::Base::m_A << endl;
}

//同名静态成员函数
void  test02(){
    //1.通过对象访问
    cout << "通过对象访问！" << endl;
    Son son;
    son.func();
    son.Base::func();
    //2.通过类名访问
    cout << "通过类名访问！" << endl;
    Son::func();
    Son::Base::func();

    //子类出现和父类同名静态成员函数，也会隐藏父类中所有同名成员函数
    //如果想要访问父类中被隐藏同名成员，需要加父类作用域
    Son::Base::func(100);
}

int main()
{
    // test01();
    test02();
    return 0;
}
